package com.castile.seq;

import java.util.Arrays;
import java.util.List;
import java.util.function.UnaryOperator;

/**
 * @description:
 * @author: Castile
 * @create: 2024-04-17 23:45
 * @Version 1.0
 **/
public class Generator {

    public static void main(String[] args) {

        System.out.println(underscoreToCamel("abc_hhh_ccc")); //
    }
    static String underscoreToCamel(String str) {
        // Java没有首字母大写方法，随便现写一个
        UnaryOperator<String> capitalize = s -> s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase();
        // 利用生成器构造一个方法的流
        Seq<UnaryOperator<String>> seq = c -> {
            // yield第一个小写函数
            c.accept(String::toLowerCase);
            // 这里IDEA会告警，提示死循环风险，无视即可
            while (true) {
                // 按需yield首字母大写函数
                c.accept(capitalize);
            }
        };
        List<String> split = Arrays.asList(str.split("_"));
        // 这里的zip和join都在上文给出了实现
        return seq.zip(split, (f, sub) -> f.apply(sub)).join("");
    }
}
